{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5a7c036d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "files to be included: ['/home/dream-lab/project/translator_nn/.data/tokens.tsv']\n",
      "\n",
      "\n",
      "\n",
      "Done.\n"
     ]
    }
   ],
   "source": [
    "from tokenizers import Tokenizer, models, trainers, pre_tokenizers, Encoding, decoders\n",
    "from pathlib import Path\n",
    "\n",
    "tokenizer = Tokenizer(models.BPE(unk_token=\"<UNK>\", ignore_merges=False))\n",
    "tokenizer.pre_tokenizer = pre_tokenizers.Metaspace()\n",
    "\n",
    "language_tags = [\n",
    "    \"<ug>\", \"</ug>\",\n",
    "    \"<en>\", \"</en>\",\n",
    "    \"<jp>\", \"</jp>\",\n",
    "    \"<zh>\", \"</zh>\",\n",
    "    \"<uz>\", \"</uz>\",\n",
    "    \"<kk>\", \"</kk>\",\n",
    "    \"<ky>\", \"</ky>\",\n",
    "    \"<tr>\", \"</tr>\",\n",
    "    \"<ru>\", \"</ru>\",\n",
    "]\n",
    "trainer = trainers.BpeTrainer(special_tokens=[\"<PAD>\", \"<SOS>\", \"<EOS>\", \"<UNK>\"] + language_tags, vocab_size=30000)\n",
    "\n",
    "files = [str(i.absolute().resolve()) for i in Path(\"../../.data/text\").iterdir() if i.is_file() and i.name.endswith(\".json\")]\n",
    "# files = [\"/home/dream-lab/project/translator_nn/.data/tokens.tsv\"]\n",
    "print(f\"files to be included: {files}\")\n",
    "tokenizer.train(files, trainer)\n",
    "\n",
    "tokenizer.save(\"../../config/output_tokenizer.json\")\n",
    "print(\"Done.\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "de4adfed",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['▁', '<', 'u', 'g', '>', '<', '/', 'u', 'g', '>', '<', 'r', 'u', '>', '<', '/', 'r', 'u', '>', '<PAD>', '<UNK>', '▁', '؛', '▁شىنجاڭ', '▁ئۇي', 'غۇر', '▁ئاپت', 'ون', 'ۇم', '▁راي', 'ۇنى', '؛', '▁شار', 'چە', '▁باكتېرىيە', '▁يۇق', 'ۇ', 'مى', '▁ۋە', '▁بۇنىڭدىن', '▁كېلىپ', '▁چىققان', '▁ئۆس', 'مە', '▁بالىلارنىڭ', '▁ھاياتى', 'غا', '▁خەۋپ', '▁يەتكۈزى', 'دۇ؛', '▁ئىنسانلار', '▁ئادەم', 'لەر', '▁بىلەن', '▁ئادەم', '،', '▁ق', 'اسى', 'م', '▁ھا', 'شى', 'م', 'غا', '▁', '‹', 'يا', 'خشى', 'مۇ', 'سىز', '»', '▁دى', 'دى.', '▁ھا', 'شى', 'م', ':', '▁مەن', '▁ياخشى،', '▁ئۆزىڭىز', 'چۇ', '؟', '▁دې', 'دى.', '▁يەنە', '▁باشقا', '▁مى', 'سال', 'لاردىن', '▁گۈزەل', 'لىك', '،', '▁ياخشى', 'لىق،', '▁ئەس', 'كى', 'لىك', '،', '▁', '▁', '<UNK>', 'h', 'ar', 'in', 'g', '▁a', 'n', 'd', '▁', '<UNK>', 'o', 'l', 'la', 'b', 'o', 'ra', 't', 'i', 'on', ':', '▁', '<UNK>', 'x', 'c', 'el', '▁', 'f', 'i', 'l', 'e', 's', '▁a', 'r', 'e', '▁', 'w', 'i', 'd', 'el', 'y', '▁u', 's', 'e', 'd', '▁a', 'n', 'd', '▁e', 'a', 's', 'i', 'l', 'y', '▁', 's', 'h', 'ar', 'e', 'a', 'b', 'l', 'e', ',', '▁', 'm', 'a', 'k', 'in', 'g', '▁', 'c', 'o', 'l', 'la', 'b', 'o', 'ra', 't', 'i', 'on', '▁', 's', 'm', 'o', 'o', 't', 'h', 'er', '.', '▁', '<UNK>', 'h', 'e', 'y', '▁a', 'l', 's', 'o', '▁o', 'f', 'f', 'er', '▁a', 'd', 'd', 'i', 't', 'i', 'on', 'a', 'l', '▁', 'f', 'e', 'a', 't', 'u', 'r', 'e', 's', '▁', 'l', 'i', 'k', 'e', '▁a', 'd', 'd', 'in', 'g', '▁', 'c', 'o', 'mm', 'en', 't', 's', '▁o', 'r', '▁', 't', 'ra', 'c', 'k', '▁', 'c', 'h', 'an', 'g', 'e', 's', '▁', 'w', 'h', 'i', 'c', 'h', '▁a', 'r', 'e', '▁u', 's', 'e', 'f', 'u', 'l', '▁', 'd', 'u', 'r', 'in', 'g', '▁', 'c', 'o', 'l', 'la', 'b', 'o', 'ra', 't', 'i', 'v', 'e', '▁', 't', 'r', 'an', 's', 'la', 't', 'i', 'on', '▁', 'p', 'r', 'o', 'j', 'e', 'c', 't', 's', '.']\n",
      "[111, 29, 59, 45, 31, 29, 17, 59, 45, 31, 29, 56, 59, 31, 29, 17, 56, 59, 31, 0, 1, 111, 73, 1905, 1518, 1699, 362, 213, 277, 879, 1731, 73, 2508, 217, 3802, 1198, 103, 139, 212, 1647, 1238, 1099, 1018, 256, 3090, 1288, 159, 3585, 4095, 3226, 2931, 413, 244, 207, 413, 72, 120, 346, 91, 1983, 137, 91, 159, 111, 108, 231, 326, 176, 342, 71, 568, 415, 1983, 137, 91, 28, 524, 4089, 2241, 3961, 74, 308, 415, 365, 551, 370, 1709, 1342, 1343, 186, 72, 369, 2380, 924, 131, 186, 72, 111, 111, 1, 46, 3162, 2890, 45, 1337, 52, 42, 111, 1, 53, 50, 3661, 40, 53, 3748, 58, 47, 1850, 28, 111, 1, 62, 41, 3859, 111, 44, 47, 50, 43, 57, 1337, 56, 43, 111, 61, 47, 42, 3859, 63, 3686, 57, 43, 42, 1337, 52, 42, 2067, 39, 57, 47, 50, 63, 111, 57, 46, 3162, 43, 39, 40, 50, 43, 14, 111, 51, 39, 49, 2890, 45, 111, 41, 53, 50, 3661, 40, 53, 3748, 58, 47, 1850, 111, 57, 51, 53, 53, 58, 46, 2228, 16, 111, 1, 46, 43, 63, 1337, 50, 57, 53, 2141, 44, 44, 2228, 1337, 42, 42, 47, 58, 47, 1850, 39, 50, 111, 44, 43, 39, 58, 59, 56, 43, 57, 111, 50, 47, 49, 43, 1337, 42, 42, 2890, 45, 111, 41, 53, 3432, 3051, 58, 57, 2141, 56, 111, 58, 3748, 41, 49, 111, 41, 46, 1887, 45, 43, 57, 111, 61, 46, 47, 41, 46, 1337, 56, 43, 3686, 57, 43, 44, 59, 50, 111, 42, 59, 56, 2890, 45, 111, 41, 53, 50, 3661, 40, 53, 3748, 58, 47, 60, 43, 111, 58, 56, 1887, 57, 3661, 58, 47, 1850, 111, 54, 56, 53, 48, 43, 41, 58, 57, 16]\n",
      "char length: 546 vs token ids: 302\n",
      "Source versus decoded:\n",
      "<ug></ug><ru></ru><PAD><UNK>؛ شىنجاڭ ئۇيغۇر ئاپتونۇم رايۇنى؛ شارچە باكتېرىيە يۇقۇمى ۋە بۇنىڭدىن كېلىپ چىققان ئۆسمە بالىلارنىڭ ھاياتىغا خەۋپ يەتكۈزىدۇ؛ ئىنسانلار ئادەملەر بىلەن ئادەم، قاسىم ھاشىمغا ‹ياخشىمۇسىز» دىدى. ھاشىم: مەن ياخشى، ئۆزىڭىزچۇ؟ دېدى. يەنە باشقا مىساللاردىن گۈزەللىك، ياخشىلىق، ئەسكىلىك،  Sharing and Collaboration: Excel files are widely used and easily shareable, making collaboration smoother. They also offer additional features like adding comments or track changes which are useful during collaborative translation projects.\n",
      "<ug></ug><ru></ru> ؛ شىنجاڭ ئۇيغۇر ئاپتونۇم رايۇنى؛ شارچە باكتېرىيە يۇقۇمى ۋە بۇنىڭدىن كېلىپ چىققان ئۆسمە بالىلارنىڭ ھاياتىغا خەۋپ يەتكۈزىدۇ؛ ئىنسانلار ئادەملەر بىلەن ئادەم، قاسىم ھاشىمغا ‹ياخشىمۇسىز» دىدى. ھاشىم: مەن ياخشى، ئۆزىڭىزچۇ؟ دېدى. يەنە باشقا مىساللاردىن گۈزەللىك، ياخشىلىق، ئەسكىلىك،  haring and ollaboration: xcel files are widely used and easily shareable, making collaboration smoother. hey also offer additional features like adding comments or track changes which are useful during collaborative translation projects.\n"
     ]
    }
   ],
   "source": [
    "from tokenizers import Tokenizer, decoders, Encoding\n",
    "\n",
    "tokenizer: Tokenizer = Tokenizer.from_file(\"../../config/output_tokenizer.json\")\n",
    "tokenizer.decoder = decoders.Metaspace()\n",
    "\n",
    "example_text = \"<ug></ug><ru></ru><PAD><UNK>؛ شىنجاڭ ئۇيغۇر ئاپتونۇم رايۇنى؛ شارچە باكتېرىيە يۇقۇمى ۋە بۇنىڭدىن كېلىپ چىققان ئۆسمە بالىلارنىڭ ھاياتىغا خەۋپ يەتكۈزىدۇ؛ ئىنسانلار ئادەملەر بىلەن ئادەم، قاسىم ھاشىمغا ‹ياخشىمۇسىز» دىدى. ھاشىم: مەن ياخشى، ئۆزىڭىزچۇ؟ دېدى. يەنە باشقا مىساللاردىن گۈزەللىك، ياخشىلىق، ئەسكىلىك،  Sharing and Collaboration: Excel files are widely used and easily shareable, making collaboration smoother. They also offer additional features like adding comments or track changes which are useful during collaborative translation projects.\"\n",
    "tokenized: Encoding = tokenizer.encode(example_text)\n",
    "print(tokenized.tokens)\n",
    "print(tokenized.ids)\n",
    "print(f\"char length: {len(example_text)} vs token ids: {len(tokenized.ids)}\")\n",
    "decoded: str = tokenizer.decode(tokenized.ids, skip_special_tokens=True)\n",
    "print(\"Source versus decoded:\")\n",
    "print(example_text)\n",
    "print(decoded)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "spell_correction",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
